package com.chris.code.controller;

import com.chris.code.model.Database;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.sql.DataSource;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.SQLException;

/**
 * Copyright (c) 2018-2025, chris All rights reserved.
 * <p>
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * <p>
 * Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 * Neither the name of the pig4cloud.com developer nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 * <p>
 * Author: haoka (haokang207@126.com)
 * <p>
 * Date: 2018/9/30 10:11
 **/
@RestController
@RequestMapping("/database")
@Slf4j
public class DatabaseController {

    @PostMapping
    public Object test(Database database) throws UnsupportedEncodingException {
        String result;
        DataSource dataSource = DataSourceBuilder.create()
                .driverClassName(database.getDriverClassName())
                .username(database.getUsername())
                .password(database.getPassword())
                .url("jdbc:mysql://" + database.getHost() + ":" + database.getPort() + "/" + database.getSchema()
                        + "?characterEncoding=UTF-8")
                .build();
        try {
            Connection connection = dataSource.getConnection();
            connection.prepareStatement("select 1").executeQuery();
            result = "连接成功";
        } catch (SQLException e) {
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            PrintStream pw = new PrintStream(outputStream);
            e.printStackTrace(pw);
            result = outputStream.toString("UTF-8");
        }
        return result;
    }
}
